/*
 * @Author: SimonCK666 SimonYang223@163.com
 * @Date: 2022-05-08 19:28:04
 * @LastEditors: SimonCK666 SimonYang223@163.com
 * @LastEditTime: 2022-05-08 19:40:35
 * @FilePath: /golang-concept/L7_init/init.go
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
package main

// golang 有一个特殊的函数 init 函数，先于 main 函数执行。实现包级别的一些初始化操作

// init 函数主要特点
/**
	1. init 函数先于 main 函数自动执行，不能被其他函数调用
	2. init 函数没有输入参数，返回值
	3. 每个包可以有多个 init 函数
	4. 包的每个源文件也可以有多个 init 函数，这点比较特殊
	5. 同一个包的 init 执行顺序，golang 没有明确定义，编程时需要注意程序不要依赖这个执行顺序
	6. 不同包的 init 函数按照包导入的依赖关系决定执行顺序
*/

// golang 初始化顺序
//	变量初始化 --> init() --> main()

import "fmt"

var i int = initVar()

func initVar() int {
	fmt.Printf("initVar...\n")
	return 100
}

func init()  {
	// init 函数没有参数也没有返回值
	fmt.Printf("init...\n")
}

func main() {
	// init 函数不能调用

	fmt.Printf("main...\n")
}